<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
</head>

<body></body>
<script>
  const tree = [{
    id: "01",
    name: "张大大",
    pid: "",
    job: "项目经理",
    label: "张大大",
    children: [{
        id: "02",
        name: "小亮",
        pid: "01",
        job: "产品leader",
        label: "小亮",
        children: [{
            id: "03",
            name: "小美",
            pid: "02",
            job: "UIleader",
            label: "小美",
            children: [{
              id: "09",
              name: "小高",
              pid: "03",
              job: "UI设计师",
              label: "小高",
            }, ],
          },
          {
            id: "07",
            name: "小丽",
            pid: "02",
            job: "产品经理",
            label: "小丽",
          },
          {
            id: "08",
            name: "大光",
            pid: "02",
            job: "产品经理",
            label: "大光",
          },
        ],
      },
      {
        id: "04",
        name: "老马",
        pid: "01",
        job: "技术leader",
        label: "老马",
        children: [{
            id: "10",
            name: "小刘",
            pid: "04",
            job: "前端工程师",
            label: "小刘",
          },
          {
            id: "11",
            name: "小华",
            pid: "04",
            job: "后端工程师",
            label: "小华",
          },
          {
            id: "12",
            name: "小李",
            pid: "04",
            job: "后端工程师",
            label: "小李",
          },
        ],
      },
      {
        id: "05",
        name: "老王",
        pid: "01",
        job: "测试leader",
        label: "老王",
        children: [{
            id: "13",
            name: "小赵",
            pid: "05",
            job: "测试工程师",
            label: "小赵",
          },
          {
            id: "14",
            name: "小强",
            pid: "05",
            job: "测试工程师",
            label: "小强",
          },
        ],
      },
      {
        id: "06",
        name: "老李",
        pid: "01",
        job: "运维leader",
        label: "老李",
        children: [{
          id: "15",
          name: "小涛",
          pid: "06",
          job: "运维工程师",
          label: "小涛",
        }, ],
      },
    ],
  }, ];
  // const treeToArray = (tree) => {
  //   let arr = [];
  //   const expanded = (datas) => {
  //     if (datas && datas.length > 0) {
  //       datas.forEach((e) => {
  //         arr.push(e);
  //         expanded(e.children);
  //       });
  //     }
  //   };
  //   expanded(tree);
  //   return arr;
  // };
  // let treeList = treeToArray(tree);
  // console.log("列表", treeList);
  // 当前选择
  let curr = {
    id: "05",
    name: "老王",
    pid: "01",
    job: "测试leader",
    label: "老王",
    children: [{
        id: "13",
        name: "小赵",
        pid: "05",
        job: "测试工程师",
        label: "小赵",
      },
      {
        id: "14",
        name: "小强",
        pid: "05",
        job: "测试工程师",
        label: "小强",
      },
    ],
  };
  // 指定菜单下的第一个子元素
  const getChildFirst = (e) => {
    return e && e.children && e.children.length != 0 ?
      getChildFirst(e.children[0]) :
      e;
  };
  let result = getChildFirst(curr);
  console.log("result", result);
  // 指定子元素，获取其一级根元素
  // let child = {
  //   id: "13",
  //   name: "小赵",
  //   pid: "05",
  //   job: "测试工程师",
  //   label: "小赵",
  // };
  // const findRoot = (tree, e) => {
  //   console.log(tree, e);
  //   let list = treeToArray(tree);
  //   console.log(list, e);
  //   if (e.pid) {
  //     let d = getI(list, e.pid);
  //     console.log("ddd", d);
  //     return d;
  //   } else {
  //     return e;
  //   }
  // };

  // function getI(list, pid) {
  //   return list.find((i) => i.id == pid);
  // }

  // let r1 = findRoot(tree, child);
  // console.log("ggg", r1);

  // 查找一个树多有第一个节点，深度遍历
  // function getFirstNode(tree) {
  //   var temp = [];
  //   var forFn = function(arr) {
  //     if (arr && arr.length > 0) {
  //       temp.push(arr[0]);
  //       if (arr[0].children) {
  //         forFn(arr[0].children);
  //       }
  //     }
  //   };
  //   forFn(tree);
  //   return temp;
  // }
  // console.log("sdddd", getFirstNode(tree));

  const tree1 = [{
      id: "02",
      name: "小亮",
      pid: "01",
      job: "产品leader",
      label: "小亮",
      children: [{
          id: "03",
          name: "小美",
          pid: "02",
          job: "UIleader",
          label: "小美",
          children: [{
            id: "09",
            name: "小高",
            pid: "03",
            job: "UI设计师",
            label: "小高",
          }, ],
        },
        {
          id: "07",
          name: "小丽",
          pid: "02",
          job: "产品经理",
          label: "小丽",
        },
        {
          id: "08",
          name: "大光",
          pid: "02",
          job: "产品经理",
          label: "大光",
        },
      ],
    },
    {
      id: "04",
      name: "老马",
      pid: "01",
      job: "技术leader",
      label: "老马",
      children: [{
          id: "10",
          name: "小刘",
          pid: "04",
          job: "前端工程师",
          label: "小刘",
        },
        {
          id: "11",
          name: "小华",
          pid: "04",
          job: "后端工程师",
          label: "小华",
        },
        {
          id: "12",
          name: "小李",
          pid: "04",
          job: "后端工程师",
          label: "小李",
        },
      ],
    },
    {
      id: "05",
      name: "老王",
      pid: "01",
      job: "测试leader",
      label: "老王",
      children: [{
          id: "13",
          name: "小赵",
          pid: "05",
          job: "测试工程师",
          label: "小赵",
        },
        {
          id: "14",
          name: "小强",
          pid: "05",
          job: "测试工程师",
          label: "小强",
        },
      ],
    },
    {
      id: "06",
      name: "老李",
      pid: "01",
      job: "运维leader",
      label: "老李",
      children: [{
        id: "15",
        name: "小涛",
        pid: "06",
        job: "运维工程师",
        label: "小涛",
      }, ],
    },
  ];

  // 查找一级父节点
  function getParentFirst(id, list = [], result = []) {
    for (let i = 0; i < list.length; i += 1) {
      if (list[i].id == id) {
        result.push(list[i]);
        if (result.length === 1) return result;
        return true;
      }
      if (list[i].children) {
        result.push(list[i]);
        const find = getParentFirst(id, list[i].children, result);
        if (find) {
          return result;
        }
        result.pop();
      }
    }
    return false;
  }
  let re = getParentFirst("09", tree1) && getParentFirst("09", tree1).length ? getParentFirst("09", tree1)[0] : {}
  console.log("最终：", re);
</script>

</html>